package kr.co.tomatosystem.pdetools.shell.internal;

import kr.co.tomatosystem.pdetools.shell.internal.util.StringUtil;

import org.eclipse.core.expressions.PropertyTester;
import org.eclipse.core.runtime.Platform;

/**
 * {@link Platform} 클래스에 대해 다음 속성의 프로퍼티 테스팅을 제공합니다.
 * <ul>
 * <li>OS: {@link Platform#getOS()} 값을 얻어 사용자가 입력한 값과 비교합니다. 이 값은
 * {@link Platform} 클래스에 OS_XXX 형태로 선언되어 있습니다.</li>
 * <li>OSArch: {@link Platform#getOSArch()} 값을 얻어 사용자가 입력한 값과 비교합니다.</li>
 * <li>inDevelopment: 개발 모드인 경우 <code>true</code> 그렇지 않은 경우 <code>false</code></li>
 * <li>inDebugMode: 디버그 모드인 경우 <code>true</code> 그렇지 않은 경우 <code>false</code></li>
 * </ul>
 * 
 * @author Jeeeyul
 * 
 */
public class PlatformPropertyTester2 extends PropertyTester {

    public PlatformPropertyTester2() {
    }

    @Override
    public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
        if (receiver != Platform.class) {
            return false;
        }

        if (property.equals("OS")) {
            return StringUtil.areSame(expectedValue.toString(), Platform.getOS());
        } else if (property.equals("OSArch")) {
            return StringUtil.areSame(expectedValue.toString(), Platform.getOSArch());
        } else if (property.equals("inDevelopmentMode")) {
            return Platform.inDevelopmentMode();
        } else if (property.equals("inDebugMode")) {
            return Platform.inDebugMode();
        }

        return false;
    }

}
